package com.cskaoyan.javase.homework.day03;

import java.util.Arrays;

/**
 * 数组的选择排序和冒泡排序
 * @since 19:24
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class ArraySortDemo {
    public static void main(String[] args) {
        int[] arr = {1, 21, 3, 4, 22, 12, 5, 2, 3, 4, 4};
        // selectionSort(arr);
        bubbleSort(arr);
        // System.out.println(Arrays.toString(arr));
    }

    // 对一个int数组做选择排序
    /*
        对数组元素左排序,直接在原先数组中操作就可以了,无需给出返回值
        选择排序指的是每次选择一个最小的放在首位,直到将整个数组排序完毕
     */
    public static void selectionSort(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            // 从第二个元素开始遍历
            for (int j = i + 1; j < arr.length; j++) {
                // 如果后面的元素更小,那就给它替换到前面
                if (arr[j] < arr[i]) {
                    int temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;
                }
            }
            System.out.println(Arrays.toString(arr));
        }
    }

    // 对一个int数组做冒泡排序
    // 冒泡排序指的是每次选择一个最大的放在末尾,直到将整个数组排序完毕
    public static void bubbleSort(int[] arr) {
        for (int i = arr.length - 1; i >= 0; i--) {
            // 从倒数第二个元素开始遍历
            for (int j = i - 1; j >= 0; j--) {
                // 如果前面的元素更大,那就给它替换到后面
                if (arr[i] < arr[j]) {
                    int temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;
                }
            }
            System.out.println(Arrays.toString(arr));
        }
    }
}
